前言
最近需要解决GreenDao 在迭代升级数据库时需要做数据库迁移。经过查资料解决了,立个flag备忘。。
问题切入点
|
|
GreenDao 在根据数据库版本号升级的时候会执行DevOpenHelper的onUpgrade方法,我们依次看到dropAllTables,onCreate,先清除所有的数据表,然后重建,这样我们上一个版本是数据表里的老数据就被drop掉了。所以我们的切入点就是着这里。
解决办法
这里我们的基本思路是:
1.对老的数据表重新命名,作为临时数据表
2.建立新的数据表
3.将临时数据表的所有数据迁移到新的数据表
4.删除临时数据表
这里我们统筹用MigrationHelper管理
step.1
将老的数据表重命名 **_TEMP
这里从系统表 sqlite_master 里面查需要迁移数据的表是否存在
step.2
|
|
由于父类AbstractDao不存在createTable这个方法,而是在每个子类的*Dao实现了createTable这个方法,所以这里我们采用反射来获得这个方法,来做建立新的表结构操作。
step.3
|
|
这里就是简单的从老表拿数据insert到新的表结构里面,这里可以根据具体项目来进行插入。